﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DotBusiness.Container;
using DotBusiness.Models;
using DotHandler;
using DotLink.Controllers;

namespace DotLink
{
    public static class Bag
    {
        public static void Initializer()
        {
            Bag.F_Tipos.Load();
            Bag.P_Produtos.Load();
            J_Produtos = (JProdutos)Bag.P_Produtos.Join(typeof(JProdutos), typeof(JProduto), Bag.F_Tipos, "IdTipo", "Id");
            
            Bag.L_ProdutosPedidos.Load();
            Bag.L_Delivery.Load();
            Bag.L_Locais.Load();
            
        }
        public static CardapioController Cardapio = new CardapioController();
        public static AtendimentoController Atendimento = new AtendimentoController();

        public static Produtos P_Produtos = new Produtos();
        public static Tipos F_Tipos = new Tipos();
        public static JProdutos J_Produtos = new JProdutos();

        public static Joiner[] JProdutos_Array()
        {
            try
            {
                P_Produtos.Persist();
                J_Produtos = (JProdutos)Bag.P_Produtos.Join(typeof(JProdutos), typeof(JProduto), Bag.F_Tipos, "IdTipo", "Id");
                return (JProduto[])J_Produtos.ToArray();
            }
            catch(Exception e)
            {
                Console.Write(e.StackTrace);
                return new JProduto[1] { default(JProduto) };
            }
        }
        public static MTipo[] MTipos_Array()
        {
            try
            {
                Bag.F_Tipos.Persist();
                return (MTipo[])Bag.F_Tipos.MapTo(typeof(MTipo));
            }
            catch
            {
                return new MTipo[1] { default(MTipo) };
            }
        }

        public static Deliveries L_Delivery = new Deliveries();
        public static MDelivery[] L_Delivery_Array()
        {
            L_Delivery.Persist();
            return (MDelivery[])L_Delivery.MapTo(typeof(MDelivery));
        }
        public static Locais L_Locais = new Locais();
        public static MLocal[] L_Locais_Array(){
            L_Locais.Persist();
            return (MLocal[])L_Locais.MapTo(typeof(MLocal));
        }

        public static ProdutosPedidos L_ProdutosPedidos = new ProdutosPedidos();
        public static MProdutoPedido [] MProdutosPedidos_Array(int IdPedido, bool delivery){
            L_ProdutosPedidos.Persist();
            var pppedidos = L_ProdutosPedidos.Find(true, "IdPedido", IdPedido.ToString());
            var ppdelivery = pppedidos.Find(true, "Delivery", delivery.ToString());
            JProdutosPedidos jpp = (JProdutosPedidos)ppdelivery.Join(
                typeof(JProdutosPedidos), 
                typeof(JProdutoPedido), 
                Bag.J_Produtos, 
                "IdProduto", 
                "Cod");
            if (jpp != null)
            {
                return (MProdutoPedido[])jpp.MapTo(typeof(MProdutoPedido));
            }
            return null;
        }
    }
}
